package tinybase.ix;

import java.nio.ByteBuffer;

import tinybase.basic.BytePointer;
import tinybase.pf.PageNum;

public class IX_PageHdr {
	short flags;
	short numKeys;
	int prevNode;
	int nextNode;
	
	public int getPrevNode() {
		return prevNode;
	}

	public void setPrevNode(int prevNode) {
		this.prevNode = prevNode;
	}

	public int getNextNode() {
		return nextNode;
	}

	public void setNextNode(int nextNode) {
		this.nextNode = nextNode;
	}

	public static int getFlagsOffset() {
		return 0;
	}
	
	public static int getNumKeysOffset() {
		return 2;
	}
	
	public static int getPrevNodeOffset() {
		return 4;
	}
	
	public static int getNextNodeOffset() {
		return 8;
	}
	
	// generate a Ix_pageHdr from a BytePointer
	public IX_PageHdr(byte[] node, int startOffset) {
		ByteBuffer buf= ByteBuffer.wrap(node);
		flags= buf.getShort(startOffset + 0);
		numKeys= buf.getShort(startOffset + 2);
		prevNode= buf.getInt(startOffset + 4);
		nextNode= buf.getInt(startOffset + 8);
	}
	
	public void setIxPageHdr(byte[] node, int startOffset) {
		ByteBuffer buf= ByteBuffer.wrap(node);
		flags= buf.getShort(startOffset + 0);
		numKeys= buf.getShort(startOffset + 2);
		prevNode= buf.getInt(startOffset + 4);
		nextNode= buf.getInt(startOffset + 8);
	}

	public void writeBackNode(BytePointer node, int startOffset) {
		byte[] arr= node.getArray();
		ByteBuffer buf= ByteBuffer.wrap(arr);
		buf.putShort(startOffset + 0, flags);
		buf.putShort(startOffset + 2, numKeys);
		buf.putInt(startOffset + 4, prevNode);
		buf.putInt(startOffset + 8, nextNode);
	}
}
